﻿using System;
using Microsoft.Practices.ServiceLocation;
using System.Web.Mvc;
using System.Web.Routing;
using Subfaculty.Common.Interfaces;

namespace Subfaculty.WebApplication
{
	// Note: For instructions on enabling IIS6 or IIS7 classic mode, 
	// visit http://go.microsoft.com/?LinkId=9394801

	public class MvcApplication : System.Web.HttpApplication
	{
		private ISessionProvider _sessionProvider;

		public MvcApplication()
		{
			BeginRequest += MvcApplication_BeginRequest;
			EndRequest += MvcApplication_EndRequest;
		}

		public static void RegisterGlobalFilters(GlobalFilterCollection filters)
		{
			filters.Add(new HandleErrorAttribute());
		}

		public static void RegisterRoutes(RouteCollection routes)
		{
			routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

			routes.MapRoute(
				"Default", // Route name
				"{controller}/{action}/{id}", // URL with parameters
				new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
			);

		}


		protected void Application_Start()
		{
			AreaRegistration.RegisterAllAreas();

			RegisterGlobalFilters(GlobalFilters.Filters);
			RegisterRoutes(RouteTable.Routes);
			
			new SubfacultyModule().Load();
			InitORM();


			var sessionProvider = new SessionProvider();
			sessionProvider.OpenSessionForContext();
			sessionProvider.CloseCurrentContextSession();
		}

		private void InitORM()
		{
			_sessionProvider = new SessionProvider();
		}

		private void MvcApplication_BeginRequest(object sender, EventArgs e)
		{
			var sessionProvider = ServiceLocator.Current.GetInstance<ISessionProvider>();
			sessionProvider.OpenSessionForContext();
		}

		private void MvcApplication_EndRequest(object sender, EventArgs e)
		{
			var sessionProvider = ServiceLocator.Current.GetInstance<ISessionProvider>();
			sessionProvider.CloseCurrentContextSession();
		}

	}
}